Bluetooth deja de funciona a los pocos minutos

Descripcion

Al estar usando un gamepad a traves de bluetooth a los pocos minutos de estar usandolo deja de funcionar.

Una vez en este estado el gamepad se queda completamente bloqueado y ni siquiera desconectando y volviendo a conectar recupera la funcionalidad.

Solucion

El fallo se da en algunos gamepads por la funcionalidad de autosuspend.

Para solucionar este problema podemos desactivar el autosuspend de la siguiente manera

De manera temporal

Si queremos hacerlo de manera temporal o para arreglarlo en el momento que se nos ha quedado bloqueado lanzamos los siguientes comandos:

lsusb --tree

Este comando simplemente nos permitira saber cual es la ruta de nuestro dispositivo dentro de /sys/bus/usb/devices

Nos fijamos en cual es nuestro dispositivo (btusb en este caso) y cogemos los numeros de los puertos que nos llevan hasta el, en mi caso el dispositivo es el 1-1.7 por lo tanto la ruta en la que tendre que trabajar será: /sys/bus/usb/devices/1-1.7

Tendremos que modificar dos configuraciones el control y el autosuspend, lo hacemos con los siguientes comandos:

echo on > /sys/bus/usb/devices/1-1.7/power/control echo 0 > /sys/bus/usb/devices/1-1.7/power/autosuspend

Una vez hecho esto recargamos los modulos relativos al bluetooth:

# modprobe -ra btusb btrtl btintel # modprobe -a btusb btrtl btintel

Una vez hecho esto el dispositivo ya estaría listo para conectarse de nuevo sin los problemas de desconexión

Solución permanente

Para hacer que la solucion sea permanente tenemos que crear un archivo en las reglas de udev, creamos el siguiente archivo:

/etc/udev/rules.d/10-bluetooth.rules

Y dentro introducimos el siguiente contenido:

ACTION=="add" \
  , ATTR{idProduct}=="0a2a" \
  , ATTR{idVendor}=="8087" \
  , ATTR{power/autosuspend_delay_ms}="-1" \
  , ATTR{power/autosuspend}="0" \
  , ATTR{power/control}="on"

NOTA: la linea de autosuspend_delay_ms no sé si es necesaria tambien (me ha fallado una vez al no tenerla, de momento la dejo a ver si se vuelve a repetir el fallo incluso teniendo la linea)

En la linea de idProduct y en la linea de idVendor tenemos que poner los identificadores de nuestro dispositivo bluetooth, para saber estos datos usamos el comando lsusb:

Ese es nuestro dispositivo, y para mirar mas en concreto cual es cada identificador usamos el comando con la opción -v para ver mas información:

lsusb -v

Una vez tengamos el archivo con los cambios hechos, guardamos y reiniciamos el sistema y ya estaría listo.

NOTA: Con mi gamepad de stadia se da un problema a mayores y es que cuando apago el mando manualmente (manteniendo pulsado el boton) despues, al intentar reconectar al momento, el gamepad no es detectado correctamente, para solucionar esto simplemente desde el gestor de dispositivos de bluetooth le damos a desconectar y el gamepad se autoreconecta y ya funciona todo correctamente de nuevo.

Tags

Bluetooth | autosuspend | Controllers